﻿// owner 蒋家伟

#pragma once
#include "IElement.h"

namespace jsdk
{
    class IExternalData;
    class UniqueId;
}

namespace jsdk
{
    // 类别描述 : 通用的Element
    class DATASCHEMA_EXPORT IGenericElement : public IElement
    {
        DEFINE_DRIVER_BASE(IGenericElement)
    public:
        virtual ~IGenericElement() {}

        /// \ brief 创建一个常规对象
        /// \ in pDoc 期望被创建在的文档
        /// \ in typeUid 类别uid
        /// \ in opExternalData 外部数据
        /// \ in isTemp 是否为临时对象，临时对象不会被序列化
        /// \ return IElement* 创建成功则返回一个完整对象指针，否则为空
        static IElement* create(IDocument* pDoc,
            const UniqueId& typeUid,
            OwnerPtr<IExternalData> opExternalData,
            bool isTemp = false);
    public:
        /// \ brief 获取对象的外部数据
        /// \ return 外部数据组件
        virtual const IExternalData* getExternalData() const = 0;
        virtual  IExternalData* getExternalData() = 0;
    };
}
